home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Tool Chest / Development Tools & Languages / HyperCard Related / APDA HyperCard Toolkits / HyperCard Video Toolkit 2.0 / HVT #2 / Advanced Material / Video Sources / setVideoPlayer.p < prev    next >
Encoding:
Text File  |  1995-02-07  |  4.9 KB  |  190 lines  |  [TEXT/MPS ]

  1. (*
  2.     setTypeOfVideo playerName - Select the type of videodisc player being used. The parameter
  3.         playerName is the name of the player. The player name can be a short name or a long
  4.         name. The driver for the player is the short name with "vidDrvr" prepended. For example,
  5.         the Pioneer 4200 has a short name of "P4200", a long name of "Pioneer 4200", and a
  6.         drivers named "vidDrvrP4200".
  7.  
  8.     To compile and link this file using Macintosh Programmer's Workshop,
  9.  
  10.         pascal -w setVideoPlayer.p
  11.  
  12.         link -m ENTRYPOINT -o HyperCommands -rt XCMD=8006 -sn Main=setVideoPlayer ∂
  13.             setVideoPlayer.p.o "{MPW}"Libraries:interface.o "{MPW}"PLibraries:PasLib.o
  14.  
  15.     Copyright © 1987,88 Apple Computer, Inc.
  16.  
  17.     9/87 - Initial coding by Harry R. Chesley.
  18.     2/88 - Changed for new interface specification by Harry R. Chesley.
  19. *)
  20.  
  21. {$R-}
  22.  
  23. {$S setVideoPlayer }     { Segment name must be the same as the command name. }
  24.  
  25. unit DummyUnit;
  26.  
  27. interface
  28.  
  29. uses MemTypes, QuickDraw, OSIntf, ToolIntf, HyperXCmd;
  30.  
  31. procedure EntryPoint(paramPtr: XCmdPtr);
  32.     
  33. implementation
  34.  
  35. type
  36.  
  37. Str31 = String[31];
  38.  
  39. procedure setVideoPlayer(paramPtr: XCmdPtr); forward;
  40.  
  41. procedure EntryPoint(paramPtr: XCmdPtr);
  42.  
  43.     begin
  44.         setVideoPlayer(paramPtr);
  45.     end;
  46.  
  47. procedure setVideoPlayer(paramPtr: XCmdPtr);
  48.  
  49.     var str: str255;
  50.         nameToSet: str255;            { The requested name. }
  51.         resHandle: Handle;            { Driver resource handle. }
  52.         resID: integer;                    { Driver resource ID. }
  53.         resType: ResType;            { Driver resource type. }
  54.         resName: str255;                { Driver resource name. }
  55.         i: integer;
  56.         thePlayers: Handle;            { List of HyperTalk players (as opposed to XCMD players). }
  57.         p, p2: Ptr;
  58.         lastChar: SignedByte;
  59.  
  60.     {$I XCmdGlue.inc}
  61.  
  62.     procedure Fail(errMsg: Str255); { set theResult and quit }
  63.         begin
  64.             paramPtr^.returnValue := PasToZero(errMsg);
  65.             exit(setVideoPlayer);
  66.         end;
  67.  
  68.     {$I VideoUtil.inc}
  69.  
  70.     function nameInList(list: str255; name: str255): boolean;
  71.  
  72.         var itemStart: integer;
  73.             itemEnd: integer;
  74.  
  75.         begin
  76.             itemStart := 1;
  77.             while itemStart <= length(list) do
  78.                 begin
  79.                     if list[itemStart] = ',' then itemStart := itemStart+1
  80.                     else
  81.                         begin
  82.                             itemEnd := itemStart+1;
  83.                             while itemEnd <= length(list) do
  84.                                 if list[itemEnd] = ',' then leave
  85.                                 else itemEnd := itemEnd+1;
  86.                             if StringEqual(Copy(list,itemStart,itemEnd-itemStart),name) then
  87.                                 begin
  88.                                     nameInList := true;
  89.                                     exit(nameInList);
  90.                                 end;
  91.                             itemStart := itemEnd;
  92.                         end;
  93.                 end;
  94.             nameInList := false;
  95.         end;
  96.  
  97.     procedure setName(var name: str255);
  98.         { Set the player. }
  99.  
  100.         begin
  101.             { Remember the name. }
  102.             SetStrGlobal('typeOfVideo',name);
  103.             { Use the default communications settings. }
  104.             videoCmd('control','defaultComm');
  105.         end;
  106.  
  107.     begin
  108.         if paramPtr^.paramCount <> 1 then Fail('parameter count is not 1');
  109.  
  110.         { Get the name to set. }
  111.         GetStrParm(1,nameToSet);
  112.  
  113.         { Check for the special case of None. }
  114.         if StringEqual(nameToSet,'none') then
  115.             begin
  116.                 SetStrGlobal('typeOfVideo','');
  117.                 exit(setVideoPlayer);
  118.             end;
  119.  
  120.         { Get any HyperTalk drivers. }
  121.         thePlayers := GetGlobal('videoHTPlayers');
  122.         if thePlayers <> nil then
  123.             begin
  124.                 { Cycle thru looking for a match. }
  125.                 HLock(thePlayers);
  126.                 p := Ptr(ord4(thePlayers^)-1);
  127.                 p2 := Ptr(ord4(p)+1);
  128.                 repeat
  129.                     p := Ptr(ord4(p)+1);
  130.                     lastChar := p^;
  131.                     { End of item? }
  132.                     if (lastChar = ord(',')) or (lastChar = 0) then
  133.                         begin
  134.                             { Anything there? }
  135.                             if p <> p2 then
  136.                                 begin
  137.                                     { If yes, then convert it to a Pascal item in place (more or less). }
  138.                                     p^ := 0;
  139.                                     ZeroToPas(p2,str);
  140.                                     { Check for short name match. }
  141.                                     if StringEqual(str,nameToSet) then
  142.                                         begin
  143.                                             setName(nameToSet);
  144.                                             exit(setVideoPlayer);
  145.                                         end;
  146.                                     { Check for long name match. }
  147.                                     if nameInList(EvalStr(Concat('vidDrvr',str,'(name)')),nameToSet) then
  148.                                         begin
  149.                                             setName(str);
  150.                                             exit(setVideoPlayer);
  151.                                         end;
  152.                                         end;
  153.                             p2 := Ptr(ord4(p)+1);
  154.                         end;
  155.                 until lastChar = 0;
  156.                 DisposHandle(thePlayers);
  157.             end;
  158.  
  159.         { Now try all the XFCN drivers. }
  160.         for i := 1 to CountResources('XFCN') do
  161.             begin
  162.                 { Get the resource info. }
  163.                 resHandle := GetIndResource('XFCN',i);
  164.                 GetResInfo(resHandle,resID,resType,resName);
  165.                 { If this is a driver... }
  166.                 if length(resName) > 7 then
  167.                     if StringEqual(Copy(resName,1,7),'vidDrvr') then
  168.                         begin
  169.                             { Check the short name. }
  170.                             resName := Copy(resName,8,length(resName)-7);
  171.                             if StringEqual(resName,nameToSet) then
  172.                                 begin
  173.                                     setName(nameToSet);
  174.                                     exit(setVideoPlayer);
  175.                                 end;
  176.                             { Check the long name. }
  177.                             if nameInList(EvalStr(Concat('vidDrvr',resName,'(name)')),nameToSet) then
  178.                                 begin
  179.                                     setName(resName);
  180.                                     exit(setVideoPlayer);
  181.                                 end;
  182.                         end;
  183.             end;
  184.  
  185.         { If we can't find anything, set it anyway and hope he knows what he's doing. }
  186.         setName(nameToSet);
  187.     end;
  188.  
  189. end.
  190.